Entorno y Procesos
Python permite interactuar directamente con el entorno de ejecución del intérprete y con el sistema operativo a través de módulos estándar. Entre ellos destacan dos especialmente útiles:
sys, que ofrece acceso a información y funciones internas del intérprete de Python.subprocess, que permite ejecutar comandos del sistema operativo o programas externos desde un script.
Ambos módulos resultan fundamentales en la automatización de tareas, el control del flujo de ejecución y la integración de Python con otros sistemas.
1️⃣ Módulo sys
syses un módulo integrado que se carga automáticamente al iniciar cualquier programa en Python. Su principal objetivo es permitir la comunicación entre el programa y el intérprete, lo que lo convierte en una herramienta clave para escribir scripts que reaccionen a condiciones del entorno o se comporten de forma >dinámica según los parámetros de entrada.
Para utilizarlo se importa con:
import sys
🟩 Funciones principales
| Atributo / Función | Descripción | Ejemplo |
|---|---|---|
sys.version | Devuelve la versión actual de Python. | print(sys.version) |
sys.platform | Indica el sistema operativo actual. | 'win32', 'linux', 'darwin', |
sys.argv | Lista con los argumentos de la línea de comandos. | sys.argv[0] → nombre del script |
sys.exit([código]) | Finaliza el programa de forma controlada. | sys.exit(0) |
sys.path | Lista de rutas donde Python busca los módulos importados. | print(sys.path) |
sys.stdin, sys.stdout, sys.stderr | Flujo estándar de entrada, salida y error. | sys.stderr.write("Error...") |
🟦 Ejemplos prácticos
Ejemplo 1: mostrar información del entorno
import sys
print("Versión de Python:", sys.version)
print("Sistema operativo:", sys.platform)
print("Ruta de búsqueda de módulos:")
for ruta in sys.path:
print("-", ruta)
- Este ejemplo muestra cómo obtener información sobre el entorno de ejecución.
- La lista
sys.pathincluye las carpetas donde el intérprete busca los módulos importados.
Ejemplo 2: uso de argumentos por línea de comandos
import sys
if len(sys.argv) > 1:
print("Argumentos recibidos:", sys.argv[1:])
else:
print("No se han pasado argumentos.")
- Los argumentos pasados al ejecutar el script (por ejemplo,
python programa.py datos.txt) se almacenan en la listasys.argv. - El primer elemento (
sys.argv[0]) es el nombre del archivo ejecutado.
Ejemplo 3: finalización controlada del programa
import sys
numero = int(input("Introduce un número positivo: "))
if numero < 0:
print("Error: el número no puede ser negativo.")
sys.exit(1)
print("Número válido:", numero)
sys.exit()detiene la ejecución del programa y puede devolver un código de salida al sistema operativo.- Por convención,
0indica finalización correcta y cualquier otro valor señala un error o condición especial.
🟨 Casos de uso comunes
- Obtener información del sistema y de la versión de Python.
- Leer argumentos de línea de comandos.
- Controlar la salida del programa.
- Redirigir flujos de entrada o salida.
- Personalizar rutas de búsqueda de módulos (
sys.path).
2️⃣ Módulo subprocess
El módulo
subprocessactúa como un puente entre Python y el sistema operativo. Permite lanzar otros programas, comunicarse con ellos, capturar su salida o incluso enviarles datos de entrada. Esto resulta muy útil cuando se combinan herramientas externas con scripts de automatización.
Debe importarse con:
import subprocess
🟩 Funciones principales
| Función | Descripción | Ejemplo |
|---|---|---|
subprocess.run(comando, ...) | Ejecuta un comando y espera su finalización. (Bloqueante) | subprocess.run(["ls", "-l"]) |
subprocess.check_output(comando) | Ejecuta un comando y devuelve su salida como texto. (Bloqueante) | subprocess.check_output("ping", text=True) |
subprocess.Popen() | Crea un proceso avanzado con control total. (No Bloqueante) | subprocess.Popen(["ping", "google.com"]) |
🟦 Ejemplos prácticos
Ejemplo 1: ejecutar un comando simple
import subprocess
subprocess.run(["echo", "Hola desde Python"])
- El comando
echose ejecuta igual que en la terminal del sistema. subprocess.run()espera a que el proceso termine antes de continuar con el programa.
Ejemplo 2: capturar la salida de un comando
import subprocess
resultado = subprocess.run(["python", "--version"], capture_output=True, text=True)
print("Salida del comando:", resultado.stdout)
- El parámetro
capture_output=Trueredirige la salida del comando a un objeto, mientras quetext=Trueconvierte los bytes a texto legible. - Esto permite procesar o analizar los resultados directamente desde Python.
Ejemplo 3: uso de check_output()
import subprocess
fecha = subprocess.check_output(["date"], text=True)
print("La fecha actual es:", fecha.strip())
check_output()ejecuta un comando y devuelve su salida directamente.- Se utiliza
strip()para eliminar el salto de línea final.
Ejemplo 4: ejecutar comandos complejos (modo shell)
import subprocess
subprocess.run("dir" if subprocess.os.name == "nt" else "ls -l", shell=True)
- El argumento
shell=Truepermite ejecutar comandos complejos o con tuberías. - El ejemplo selecciona automáticamente el comando adecuado según el sistema operativo.
Ejemplo 5: comunicación entre procesos
import subprocess
proceso = subprocess.Popen(["python", "-c", "print('Hola mundo')"], stdout=subprocess.PIPE, text=True)
salida, _ = proceso.communicate()
print("Salida recibida:", salida)
- Con
Popense obtiene un control completo del proceso. - El método
communicate()permite leer su salida o enviarle datos de entrada.
🟨 Casos de uso comunes
- Automatización de tareas del sistema (copias, despliegues, limpieza).
- Integración con herramientas externas (Git, sistemas de backup, compiladores).
- Captura de resultados de programas o scripts externos.
- Ejecución de procesos en paralelo o en segundo plano.
- Sustitución de
os.system()en código moderno.
📊 Tabla resumen
| Módulo | Propósito principal | Ejemplo representativo |
|---|---|---|
sys | Interactuar con el intérprete y gestionar argumentos, rutas o salidas. | sys.argv, sys.exit() |
subprocess | Ejecutar comandos del sistema y controlar procesos externos. | subprocess.run(["ls", "-l"]) |
Los módulos sys y subprocess amplían significativamente las capacidades de Python al permitir comunicarse con el sistema operativo y controlar el entorno de ejecución.
Su dominio es clave para tareas de automatización, administración de sistemas o integración con herramientas externas, convirtiendo a Python en una poderosa herramienta de trabajo tanto en entornos de usuario como de servidor.